iOSアプリ開発でZXingObjCを使ってQRコードを読み取る
今回は、iOSアプリ開発で ZXingObjC ライブラリを使い、URLの QRコード を読み取り、ブラウザで表示するサンプルを作ってみたいと思います。
実は、先日書いたZXing 2.1のブログ とほぼ同じ動きをするサンプルになりますが、 今回は ZXing を Objective-C に移植した ZXingObjC ライブラリを使用します。 ZXing で手間のかかった環境設定周りの作業が、ZXingObjC ではほとんどなくなるので、非常に使いやすくなっています。
環境構築
今回は、以下の環境を使用します。
- ZXingObjC 2.1.0
- Xcode 4.6
- iOS SDK 6.1
- iPod touch 5th
まず、サンプル用のプロジェクト「SampleZXingObjC」を作成します
(「Single View Application」テンプレート、ストーリーボード使用、ARC使用)。
次にライブラリをダウンロードします。
https://github.com/TheLevelUp/ZXingObjC/tags
から ZXingObjC-2.1.0.zip をダウンロードしましょう。
ダウンロードしたら、ZXingObjC.xcodeproj をドラッグ&ドロップでSampleZXingObjCプロジェクトに追加します。
次に、libZXingObjC-iOS.a のリンクを追加します。
つづけて、ZXingObjC-iOS(ZXingObjC) を Target Dependencies に追加します。
最後に、以下のフレームワークを追加します。
- AVFoundation.framework
- CoreGraphics.framework
- CoreMedia.framework
- CoreVideo.framework
- ImageIO.framework
- QuartzCore.framework
これで環境構築完了です。エラーもありません。ZXing より簡単です。
サンプルの実装
サンプルの画面を作っていきます。
シンプルに読み取り画面を表示するボタンだけ配置します。
次に、ヘッダーファイルを作成します。
ViewController.h
#import <UIKit/UIKit.h> #import <ZXingObjC/ZXingObjC.h> @interface ViewController : UIViewController <ZXCaptureDelegate> - (IBAction)showReadViewPressed:(id)sender; @end
最後に、実装ファイルを作成します。
ViewController.m
#import "ViewController.h" @interface ViewController () @property(nonatomic,retain) ZXCapture* zxcapture; @end @implementation ViewController @synthesize zxcapture; - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (IBAction)showReadViewPressed:(id)sender { self.zxcapture = [[ZXCapture alloc] init]; zxcapture.delegate = self; // 背面カメラを使います。 zxcapture.camera = zxcapture.back; UIViewController* vc = [[UIViewController alloc] init]; zxcapture.layer.frame = vc.view.bounds; [vc.view.layer addSublayer:zxcapture.layer]; [zxcapture start]; // 読み取り画面を表示します。 [self presentViewController:vc animated:NO completion:nil]; } - (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result { if (result.barcodeFormat != kBarcodeFormatQRCode){ return; } // ブラウザを起動します。 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:result.text]]; // 読み取り画面を閉じます。 [self dismissViewControllerAnimated:NO completion:nil]; [zxcapture stop]; self.zxcapture = nil; } @end
これでサンプルの実装は完了です。
動作確認
まず、QRコードを用意します。このコードは文字列にすると http://classmethod.jp になります。
では、アプリを起動します。
「読み取り画面表示」ボタンをタップして、読み取り画面を表示して、QRコードを認識させます。
QRコードを認識した直後に、ブラウザが起動しました!
ちなみに、環境設定や使い方については、
https://github.com/TheLevelUp/ZXingObjC#readme はもちろん、
付属のサンプル( ZXingObjC-2.1.0/examples/BarcodeScanner/BarcodeScanner.xcodeproj )も参考になります。
次回は、ZXingObjC を使って QRコード を生成(エンコード)してみたいと思います。
ではでは。